﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SchoolManagementSystem.Controls;
using CoreData;
using Helper;
using SchoolManagementSystem.Objects;
using SchoolManagementSystem.Forms.BusinessForm;
using DevExpress.XtraEditors.Controls;
using System.Threading;
namespace SchoolManagementSystem.Details
{
    public partial class Receipt_VoucherFeeUC : DetailUC
    {
        //phiếu thu
        long studentID = 0;
        long tempStudentId = 0; //danh cho phieu thu dat coc
        long branchId = 0; //danh cho phieu thu dat coc
        int typefee;

        KList<Receipt_FeeTimeObject> listfeetime;
        DateTime CreateDate;
        Thread threadCheckOverPay;
        public Receipt_VoucherFeeUC()
        {
            InitializeComponent();
            this.ObjectName = "phiếu thu học phí";
            this.Code = "ReceiptFeeBill";
            this.Type = new Voucher();


            //comboboxUC_PaymentMethod.Model = RegisterService.RegisterServices.PaymentMethodService;
            //comboboxUC_PaymentMethod.Uc = new Payment_MethodUC();
            //comboboxUC_PaymentMethod.ColumnMain = "Name";
            //comboboxUC_PaymentMethod.ColumnDisplay = "Code,Name";

            comboboxUC_ReceiptReason.Model = RegisterService.RegisterServices.PaymentReasonService;
            comboboxUC_ReceiptReason.Uc = new Receipt_Payment_ReasonUC(1);
            comboboxUC_ReceiptReason.SearchString = " Type=1";
            comboboxUC_ReceiptReason.ColumnMain = "Name";
            comboboxUC_ReceiptReason.ColumnDisplay = "Code,Name";


            comboboxUC_ReceiptReason.combobox.EditValueChanged += new EventHandler(lookUReceiptReason_EditValueChanged);

           
            comboboxUC_ReceiptReason.Enabled = false;

            dateEdit_ceatedate.DateTime = DateTime.Now;
            radioGroup_AutoMode.SelectedIndex = 1;
           

          //  dateEdit_ceatedate.Enabled = false;
         //   txtcode.Enabled = false;


        }



        #region CRUD



        #endregion


        void lookUReceiptReason_EditValueChanged(object sender, EventArgs e)
        {
           
        }

        /// <summary>
        /// kiem tra xem có học viên nào đóng dư học phí hay không
        /// </summary>
        void CheckReceiptVoucherFeeOverBalance()
        {
            this.BeginInvoke((MethodInvoker)delegate {
                splashScreenManager1.ShowWaitForm();
                 var   overPayInfos = RegisterService.RegisterServices.ReceiptVoucherFeeService.GetListStudentPayOverBalance();
                if (overPayInfos != null && overPayInfos.Count != 0)
                {
                    cmdViewOverPay.Visible = true;
                    lbloverpay.Text = "Có học viên đóng dư, vui lòng bấm vào xem danh sách để kiểm tra";
                }
                else
                {
                    lbloverpay.Text = string.Empty;
                    cmdViewOverPay.Visible = false;
                }
                splashScreenManager1.CloseWaitForm();
            });
            
        }



        /// <summary>
        /// Load lần đóng học phí, nếu lần nào đã đóng đủ thì không hiện 
        /// </summary>
        /// <param name="studentid"></param>
        /// <param name="type"></param>
        void LoadFeeTime(long studentid, int type)
        {
            cbfeetime.Properties.Items.Clear();
            var data = RegisterService.RegisterServices.StudentFeeTimeService.GetStudentFeeTimeByStudentIDAndType(studentid, type);//Lấy lần đóng học phí theo ID học viên và loại đóng
           // var feetopay = ((Student)RegisterService.RegisterServices.StudentService.GetByID(studentid)).TotalFee; //lấy tổng học phí mà học viên buộc phải đóng
            var receiptvoucher = RegisterService.RegisterServices.ReceiptVoucherFeeService.GetByStudentID(studentid);//lất các phieu thu học phí của học viên đã đóng
            if (data.Type == 1)
            {
                listfeetime = new KList<Receipt_FeeTimeObject>();
                Receipt_FeeTimeObject item = new Receipt_FeeTimeObject();
                item.starttime = data.StartDate1;
                item.endtime = data.EndDate1;
                item.Name = "Lần 1";
                var sum = receiptvoucher.Sum(c => c.Money); // nếu đóng chưa đủ thì add vào combobox
               
                if ((sum < data.Money1) || ID > 0)
                {
                   
                    listfeetime.Add(item);

                }
                else
                {
                    var student = RegisterService.RegisterServices.StudentService.GetByID(studentid) as Student;
                    if(student.Discount==100)
                    {
                        listfeetime.Add(item);
                    }
                }
            }

            if (data.Type == 2)
            {
               // feetopay = feetopay / 2;
                listfeetime = new KList<Receipt_FeeTimeObject>();
                Receipt_FeeTimeObject item1 = new Receipt_FeeTimeObject();
                item1.starttime = data.StartDate1;
                item1.endtime = data.EndDate1;
                item1.Name = "Lần 1";

                Receipt_FeeTimeObject item2 = new Receipt_FeeTimeObject();
                item2.starttime = data.StartDate2;
                item2.endtime = data.EndDate2;
                item2.Name = "Lần 2";

                var sum = receiptvoucher.Where(c=>c.TimeFee.Contains("Lần 1")).Sum(c => c.Money);
                if ((sum < data.Money1) || ID > 0)
                {
                    
                        listfeetime.Add(item1);
                    
                }
                sum = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 2")).Sum(c => c.Money);
                if ((sum < data.Money2) || ID > 0)
                {   
                   listfeetime.Add(item2);
                }
                
            }


          

            if (data.Type == 4)
            {
              // feetopay = feetopay / 4;
                listfeetime = new KList<Receipt_FeeTimeObject>();
                Receipt_FeeTimeObject item1 = new Receipt_FeeTimeObject();
                item1.starttime = data.StartDate1;
                item1.endtime = data.EndDate1;
                item1.Name = "Lần 1";

                Receipt_FeeTimeObject item2 = new Receipt_FeeTimeObject();
                item2.starttime = data.StartDate2;
                item2.endtime = data.EndDate2;
                item2.Name = "Lần 2";

                Receipt_FeeTimeObject item3 = new Receipt_FeeTimeObject();
                item3.starttime = data.StartDate3;
                item3.endtime = data.EndDate3;
                item3.Name = "Lần 3";

                Receipt_FeeTimeObject item4 = new Receipt_FeeTimeObject();
                item4.starttime = data.StartDate4;
                item4.endtime = data.EndDate4;
                item4.Name = "Lần 4";

                var sum = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 1")).Sum(c => c.Money);
                if ((sum < data.Money1) || ID > 0)
                {
                   
                    listfeetime.Add(item1);
                }
                sum = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 2")).Sum(c => c.Money);
                if ((sum < data.Money2) || ID > 0)
                {
                    
                    listfeetime.Add(item2);
                }
                sum = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 3")).Sum(c => c.Money);
                if ((sum < data.Money3) || ID > 0)
                {
                  
                    listfeetime.Add(item3);
                }
                sum = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 4")).Sum(c => c.Money);
                if ((sum < data.Money4) || ID > 0)
                {
                    
                    listfeetime.Add(item4);
                }
            }

            if (data.Type == 6)
            {
               // feetopay = feetopay / 6;
                listfeetime = new KList<Receipt_FeeTimeObject>();
                Receipt_FeeTimeObject item1 = new Receipt_FeeTimeObject();
                item1.starttime = data.StartDate1;
                item1.endtime = data.EndDate1;
                item1.Name = "Lần 1";

                Receipt_FeeTimeObject item2 = new Receipt_FeeTimeObject();
                item2.starttime = data.StartDate2;
                item2.endtime = data.EndDate2;
                item2.Name = "Lần 2";

                Receipt_FeeTimeObject item3 = new Receipt_FeeTimeObject();
                item3.starttime = data.StartDate3;
                item3.endtime = data.EndDate3;
                item3.Name = "Lần 3";

                Receipt_FeeTimeObject item4 = new Receipt_FeeTimeObject();
                item4.starttime = data.StartDate4;
                item4.endtime = data.EndDate4;
                item4.Name = "Lần 4";

                Receipt_FeeTimeObject item5 = new Receipt_FeeTimeObject();
                item5.starttime = data.StartDate5;
                item5.endtime = data.EndDate5;
                item5.Name = "Lần 5";

                Receipt_FeeTimeObject item6 = new Receipt_FeeTimeObject();
                item6.starttime = data.StartDate6;
                item6.endtime = data.EndDate6;
                item6.Name = "Lần 6";
                var sum = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 1")).Sum(c => c.Money);
                if ((sum < data.Money1) || ID > 0)
                {
                   
                    listfeetime.Add(item1);
                }
                sum = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 2")).Sum(c => c.Money);
                if ((sum < data.Money2) || ID > 0)
                {
                   
                    listfeetime.Add(item2);
                }
                sum = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 3")).Sum(c => c.Money);
                if ((sum < data.Money3) || ID > 0)
                {
                  
                    listfeetime.Add(item3);
                }
                sum = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 4")).Sum(c => c.Money);
                if ((sum < data.Money4) || ID>0)
                {
                   
                    listfeetime.Add(item4);
                }
                sum = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 5")).Sum(c => c.Money);
                if ((sum < data.Money5) || ID > 0)
                {
                    
                    listfeetime.Add(item5);
                }
                sum = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 6")).Sum(c => c.Money);
                if ((sum < data.Money6) || ID > 0)
                {
                   
                    listfeetime.Add(item6);
                }
            }


            ComboBoxItemCollection coll = cbfeetime.Properties.Items;
            coll.BeginUpdate();
            try
            {
                cbfeetime.Properties.NullText = "[Rỗng]";
                if (listfeetime.Count != 0)
                {
                    cbfeetime.Properties.Items.AddRange(listfeetime);
                }
                else
                {
                    MessageControl.ShowMessage("Học viên này đã đóng đủ học phí", "Thông báo", MessageControl.Icon.Info);
                }
            }
            finally
            {
                coll.EndUpdate();
            }
            cbfeetime.SelectedIndex = 0;
        }

        /// <summary>
        /// Set hiện thị lần đóng
        /// </summary>
        /// <param name="data"></param>
        void SetCBFeeSelected(string data)
        {
            foreach (var item in cbfeetime.Properties.Items)
            {
                if (item.ToString() == data)
                {
                    cbfeetime.SelectedItem = item;
                    break;
                }
            }
        }

        long _feeToPay = 0;
        /// <summary>
        /// Tính toán số tiền phải đóng để gán bào label ở hàm ShowFeeToPay
        /// </summary>
        /// <param name="fee"></param>
        /// <param name="feetopay"></param>
        void CalculaFeeToPay(long fee, long feetopay)
        {
            if (radioGroup1.SelectedIndex == 0)
            {
                fee = feetopay - fee;
                if (fee >= 0)
                {

                    if (fee == 0)
                    {
                        lblfeetopay.Text = "Đã đóng đủ đợt này";
                        if(feetopay==0)
                        {
                            lblfeetopay.Text = "Học viên được khuyễn mãi 100% học phí";
                            txtnote.Text = lblfeetopay.Text;
                        }
                    }
                    else
                    { lblfeetopay.Text = "Phải đóng: " + Helper.StringHelper.FormatCurrencyVN(fee); }
                }
                else
                {
                    //  if(timestring.Contains(""
                    lblfeetopay.Text = "Đóng dư: " + Helper.StringHelper.FormatCurrencyVN(Math.Abs(fee));
                }
                _feeToPay = fee;
            }
        }


        /// <summary>
        /// Hiển thị số tiền cần đóng lên label
        /// </summary>
        /// <param name="StudentID"></param>
        /// <param name="typestring"></param>
        void ShowFeeToPay(long StudentID,int type, string typestring)
        {
            try {

                var feetopay = ((Student_FeeTime)RegisterService.RegisterServices.StudentFeeTimeService.GetByStudentID(StudentID)); //lấy tổng học phí mà học viên buộc phải đóng
                var receiptvoucher = RegisterService.RegisterServices.ReceiptVoucherFeeService.GetByStudentID(StudentID);//lất các phieu thu học phí của học viên đã đóng
                long fee=0;
                if (type == 1)
                {
                    fee = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 1")).Sum(c => c.Money);
                    //lblfeetopay.Text = Helper.StringHelper.FormatCurrencyVN(feetopay.Money1);
                    CalculaFeeToPay(fee, feetopay.Money1);
                }
                if (type == 2)
                {
                   if(typestring.Contains("Lần 1"))
                   {
                       fee = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 1")).Sum(c => c.Money);
                       CalculaFeeToPay(fee, feetopay.Money1);
                   }
                   else if (typestring.Contains("Lần 2"))
                   {
                       fee = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 2")).Sum(c => c.Money);
                       CalculaFeeToPay(fee, feetopay.Money2);
                   }
                    
                }
                if (type == 4)
                {
                    if (typestring.Contains("Lần 1"))
                    {
                        fee = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 1")).Sum(c => c.Money);
                        CalculaFeeToPay(fee, feetopay.Money1);
                    }
                    else if (typestring.Contains("Lần 2"))
                    {
                        fee = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 2")).Sum(c => c.Money);
                        CalculaFeeToPay(fee, feetopay.Money2);
                    }
                    else if (typestring.Contains("Lần 3"))
                    {
                        fee = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 3")).Sum(c => c.Money);
                        CalculaFeeToPay(fee, feetopay.Money3);
                    }
                    else if (typestring.Contains("Lần 4"))
                    {
                        fee = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 4")).Sum(c => c.Money);
                        CalculaFeeToPay(fee, feetopay.Money4);
                    }

                }
                if (type == 6)
                {
                    if (typestring.Contains("Lần 1"))
                    {
                        fee = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 1")).Sum(c => c.Money);
                        CalculaFeeToPay(fee, feetopay.Money1);
                    }
                    else if (typestring.Contains("Lần 2"))
                    {
                        fee = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 2")).Sum(c => c.Money);
                        CalculaFeeToPay(fee, feetopay.Money2);
                    }
                    else if (typestring.Contains("Lần 3"))
                    {
                        fee = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 3")).Sum(c => c.Money);
                        CalculaFeeToPay(fee, feetopay.Money3);
                    }
                    else if (typestring.Contains("Lần 4"))
                    {
                        fee = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 4")).Sum(c => c.Money);
                        CalculaFeeToPay(fee, feetopay.Money4);
                    }
                    else if (typestring.Contains("Lần 5"))
                    {
                        fee = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 5")).Sum(c => c.Money);
                        CalculaFeeToPay(fee, feetopay.Money5);
                    }
                    else if (typestring.Contains("Lần 6"))
                    {
                        fee = receiptvoucher.Where(c => c.TimeFee.Contains("Lần 6")).Sum(c => c.Money);
                        CalculaFeeToPay(fee, feetopay.Money6);
                    }

                }

            }
            catch {
                lblfeetopay.Text = Helper.StringHelper.FormatCurrencyVN(0);
            }
        }

        protected override long DetailDisplay()
        {
            try
            {
                comboboxUC_ReceiptReason.ID = 1;
                Voucher data = new Voucher();
                if (ID > 0)
                {
                    data = (Voucher)RegisterService.RegisterServices.VoucherService.GetByID(ID);
                }
                else
                {
                    radioGroup1.SelectedIndex = 0;
                    data.CreateDate = DateTime.Now;
                    if (radioGroup_AutoMode.SelectedIndex == 1)
                    {
                        data.ReceiptNo = RegisterService.RegisterServices.VoucherService.GenerateReceiptNo(data.CreateDate);
                    }
                }
                txtcode.Text = data.ReceiptNo;
                txtnote.Text = data.Description;
                txtBillNo.Text = data.BillNo;
                dateEdit_ceatedate.DateTime = data.CreateDate;
                if (data.ID == 0)
                    radioGroup_paymentmethod.SelectedIndex = 0;
                else
                    radioGroup_paymentmethod.SelectedIndex = (int)(data.PaymentMethod - 1);
                //  comboboxUC_PaymentMethod.ID = data.PaymentMethod;
                radioGroup_moneytype.SelectedIndex = data.MoneyType;
                radioGroup_excuter.SelectedIndex = data.Excuter;
               
                if (ID > 0)
                {
                    var fee_voucher = RegisterService.RegisterServices.ReceiptVoucherFeeService.GetByVoucherID(data.ID);
                    radioGroup1.SelectedIndex = fee_voucher.Type;
                    var student = (Student)RegisterService.RegisterServices.StudentService.GetByID(fee_voucher.StudentID);
                    if (fee_voucher.Type != 2)//nếu phiếu thu khác loại "Phiếu thu khác"
                    {
                        if (student != null && fee_voucher.Type != 3)
                        {
                            string textdisplay = "[" + student.Code + "] " + student.Name;
                            buttonEdit_Student.EditValue = textdisplay;
                            LoadFeeTime(student.ID, student.TypeOfFee);
                            SetCBFeeSelected(fee_voucher.TimeFee);
                            studentID = student.ID;
                            typefee = student.TypeOfFee;

                            ShowFeeToPay(studentID, student.TypeOfFee, fee_voucher.TimeFee);
                        }
                        else if (student == null && fee_voucher.Type == 3)
                        {
                            var tempStudent = (TempStudent)RegisterService.RegisterServices.TempStudentService.GetByID(fee_voucher.TempStudentID);
                            string textdisplay = tempStudent.Name;
                            buttonEdit_Student.EditValue = textdisplay;
                            tempStudentId = fee_voucher.TempStudentID;
                            branchId = fee_voucher.BranchID;
                        }
                        else if (student == null)
                        {
                            MessageControl.ShowMessage("Không thể liên kết thông tin học viên, vui lòng kiểm tra lại hoặc xóa nhập lại phiếu mới", "Cảnh báo", MessageControl.Icon.Warning);
                        }
                    }

                    spinEdit_price.EditValue = fee_voucher.Money;
                }
                else
                {
                    buttonEdit_Student.EditValue = "";
                    tempStudentId = 0;
                    branchId = 0;
                    studentID = 0;
                    typefee = 0;
                    cbfeetime.Properties.Items.Clear();
                    cbfeetime.SelectedIndex = -1;
                    spinEdit_price.EditValue = 0;
                    lblfeetopay.Text = Helper.StringHelper.FormatCurrencyVN(0);
                }
                txtnote.Text = data.Description;
            }
            catch
            {
               
                MessageControl.ShowMessage("Không thể hiện thị chi tiết của số phiếu này." + Environment.NewLine + "Có khả năng phiếu bị sai thông tin."+Environment.NewLine+"Vui lòng kiểm tra lại hoặc xóa nhập mới", "Cảnh báo", MessageControl.Icon.Error);
            }
             return ID;

        }

        protected override long Save()
        {
            Voucher data = new Voucher();
            if (ID > 0)
            {
                data = (Voucher)RegisterService.RegisterServices.VoucherService.GetByID(ID);
                data.CreateDate = dateEdit_ceatedate.DateTime;
            }
            else
            {
                data.CreateBy = ValueDefine.StaffID;
                data.CreateDate = dateEdit_ceatedate.DateTime;
            }
            data.BillNo = txtBillNo.Text;
           
            data.Description = txtnote.Text;
            data.ModifieBy = ValueDefine.StaffID;
            data.PaymentMethod = radioGroup_paymentmethod.SelectedIndex + 1;// comboboxUC_PaymentMethod.ID;
            data.ReceiptReason = comboboxUC_ReceiptReason.ID; //default =1
            data.MoneyType = radioGroup_moneytype.SelectedIndex;
            data.ModifieDate = DateTime.Now;
            data.Excuter = radioGroup_excuter.SelectedIndex;
            if (data.ID <= 0 && radioGroup_AutoMode.SelectedIndex==1)
                data.ReceiptNo = RegisterService.RegisterServices.VoucherService.GenerateReceiptNo(data.CreateDate);
            else
                data.ReceiptNo = txtcode.Text;

            if (radioGroup1.SelectedIndex == 0)
            {
                if (String.IsNullOrEmpty(txtnote.Text))
                    data.Description = "Đóng học phí: " + buttonEdit_Student.EditValue + " - " + cbfeetime.SelectedItem.ToString() + " - " + Helper.StringHelper.FormatVND(int.Parse(spinEdit_price.EditValue.ToString()));
                else
                    data.Description = txtnote.Text;
                if (ID <= 0)
                {
                    long moneyInputed = long.Parse(spinEdit_price.EditValue.ToString());
                    if (moneyInputed <= 0)
                    {
                        ErrorMess = "Số tiền thu phải lớn hơn 0, vui lòng kiểm tra lại";

                        return -1;
                    }
                    else if (moneyInputed > _feeToPay)
                    {
                        ErrorMess = "Số tiền thu không được lớn hơn số tiền phải đóng, vui lòng kiểm tra lại";

                        return -1;
                    }
                }
                
            }
            else if(radioGroup1.SelectedIndex==1)
            {
                if (String.IsNullOrEmpty(txtnote.Text))
                    data.Description = "Đóng phí bảo lưu: " + buttonEdit_Student.EditValue + " - " + Helper.StringHelper.FormatCurrencyVN(int.Parse(spinEdit_price.EditValue.ToString()));
                else
                    data.Description = txtnote.Text;
            }
            else if (radioGroup1.SelectedIndex == 3)
            {
                if (String.IsNullOrEmpty(txtnote.Text))
                {
                    var branch = RegisterService.RegisterServices.BranchService.GetByID(branchId) as Branch;
                    data.Description = "Đóng phí đặt cọc: " + buttonEdit_Student.EditValue + " [Ngành: "+branch.Name+"] - " + Helper.StringHelper.FormatCurrencyVN(int.Parse(spinEdit_price.EditValue.ToString()));
                }
                else
                    data.Description = txtnote.Text;
            }
            if (radioGroup1.SelectedIndex == 3)
            {
                var checkVoucherFee = RegisterService.RegisterServices.ReceiptVoucherFeeService.GetOneByLINQ(c => c.BranchID == branchId && c.TempStudentID == tempStudentId);
                if (checkVoucherFee != null)
                {
                    MessageControl.ShowMessage("Đã tạo phiếu thu đặt cọc cho học viên tiềm năng này rồi, không thể tạo thêm", "Cảnh báo", MessageControl.Icon.Warning);
                    return ID;
                }
            }
            ID = RegisterService.RegisterServices.VoucherService.Save(data, ref ErrorMess);
            if (ID < 0)
            {
                MessageControl.ShowMessage("Không thể lưu phiếu này, vui lòng nhập mới lại", "Lỗi", MessageControl.Icon.Error);
                return -1;
            }
            //save vao phieu thu học phi
            var fee_voucher = new Receipt_VoucherFee();
            if (data.ID > 0)
            {
                fee_voucher = RegisterService.RegisterServices.ReceiptVoucherFeeService.GetByVoucherID(ID);
            }
            if (radioGroup1.SelectedIndex == 0)//thu học phí
            {
                fee_voucher.TimeFee = cbfeetime.SelectedItem.ToString();
                fee_voucher.StudentID = studentID;
                fee_voucher.VoucherID = ID;
                fee_voucher.Type = 0;
                fee_voucher.Money = int.Parse(spinEdit_price.EditValue.ToString());
            }
            else if (radioGroup1.SelectedIndex == 1) //thu bao luu
            {
                fee_voucher.TimeFee = "";// cbfeetime.SelectedItem.ToString();
                fee_voucher.StudentID = studentID;
                fee_voucher.VoucherID = ID;
                fee_voucher.Type = 1;
                fee_voucher.Money = int.Parse(spinEdit_price.EditValue.ToString());
            }
            else if (radioGroup1.SelectedIndex == 2) //thu khác
            {
                fee_voucher.TimeFee = "";// cbfeetime.SelectedItem.ToString();
                fee_voucher.VoucherID = ID;
                fee_voucher.Type = 2;
                fee_voucher.Money = int.Parse(spinEdit_price.EditValue.ToString());
            }
            else if (radioGroup1.SelectedIndex == 3)//type =3 thu dat coc học vien tiem nang
            {
                fee_voucher.TimeFee = "";
                fee_voucher.TempStudentID = tempStudentId;
                fee_voucher.BranchID = branchId;
                fee_voucher.VoucherID = ID;
                fee_voucher.Type = 3;
                fee_voucher.Money = int.Parse(spinEdit_price.EditValue.ToString());
            }
            else //index 4 thu học bù giờ
            {
                fee_voucher.TimeFee = "";// cbfeetime.SelectedItem.ToString();
                fee_voucher.StudentID = studentID;
                fee_voucher.VoucherID = ID;
                fee_voucher.Type = 4;
                fee_voucher.Money = int.Parse(spinEdit_price.EditValue.ToString());
            }
            var feeVoucherID = RegisterService.RegisterServices.ReceiptVoucherFeeService.Save(fee_voucher);
            if (feeVoucherID < 0)
            {
                if (data.ID <= 0)
                {
                    data.ID = ID;
                    RegisterService.RegisterServices.VoucherService.Delete(data);
                    MessageControl.ShowMessage("Không thể lưu phiếu này, vui lòng nhập lại", "Lỗi", MessageControl.Icon.Error);
                    return -1;
                }
            }
            if (feeVoucherID > 0 && fee_voucher.Type == 3)
            {
                var tempStudentDepisit = RegisterService.RegisterServices.TempStudentDepositService.GetOneByLINQ(c => c.TempStudentID == tempStudentId
                    && c.BranchID == branchId) as TempStudentDeposit;
                if (tempStudentDepisit != null)
                {
                    tempStudentDepisit.Money = fee_voucher.Money;
                    RegisterService.RegisterServices.TempStudentDepositService.Save(tempStudentDepisit, ref ErrorMess);
                }

            }
            _feeToPay = 0;
        //tiep tuc save vao theo doi hoc phi

            return ID;
        }


        public override bool Delete(long SelectedID)
        {
            var voucherFee = RegisterService.RegisterServices.ReceiptVoucherFeeService.GetByVoucherID(SelectedID);
            if(voucherFee!=null)
            {            
                 RegisterService.RegisterServices.ReceiptVoucherFeeService.Delete(RegisterService.RegisterServices.ReceiptVoucherFeeService.GetByID(voucherFee.ID));
            }
           return   RegisterService.RegisterServices.VoucherService.Delete(RegisterService.RegisterServices.VoucherService.GetByID(voucherFee.VoucherID));
 
        }

        private void ReceiptUC_Load(object sender, EventArgs e)
        {
            AddTextChanged(groupControl1.Controls);
            AddTextChanged(xtraScrollableControl1.Controls);
          //  threadCheckOverPay = new Thread(new ThreadStart(() => CheckReceiptVoucherFeeOverBalance()));
           // threadCheckOverPay.Start();
            //xoa sau:
            lbloverpay.Visible = false;
            cmdViewOverPay.Visible = false;
        }

        private void radioGroup1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (radioGroup1.SelectedIndex == 0)
            {
                comboboxUC_ReceiptReason.ID = 1;
                cbfeetime.Enabled = true;
                buttonEdit_Student.Enabled = true;
            }
            else if(radioGroup1.SelectedIndex ==1) //thu bao luu
            {
                comboboxUC_ReceiptReason.ID = 8;
                cbfeetime.Enabled = false;
                lblfeetopay.Text = "";
                buttonEdit_Student.Enabled = true;
            }
            else
            {
                comboboxUC_ReceiptReason.ID = 1;
                cbfeetime.Enabled = false;
                lblfeetopay.Text = "";
                if (radioGroup1.SelectedIndex == 2)//là thu khác thi chỉ cho nhập mô tả
                {
                    buttonEdit_Student.Enabled = false;
                }
                else
                {
                    buttonEdit_Student.Enabled = true;
                }

            }
        }

        private void dateEdit_ceatedate_EditValueChanged(object sender, EventArgs e)
        {
            if (ID <= 0 && radioGroup_AutoMode.SelectedIndex==1)
            {
                try
                {
                    txtcode.Text = RegisterService.RegisterServices.VoucherService.GenerateReceiptNo(dateEdit_ceatedate.DateTime);
                }
                catch { }
            }
        }

        private void buttonEdit_Student_ButtonClick(object sender, ButtonPressedEventArgs e)
        {
            if (e.Button.Index == 0)
            {
                if (radioGroup1.SelectedIndex != 3)
                {
                    frmSelectStudent st = new frmSelectStudent();

                    if (st.ShowDialog() == DialogResult.OK)
                    {
                        string data = "[" + st.Code + "] " + st.Name;
                        buttonEdit_Student.EditValue = data;
                        studentID = st.ID;
                        typefee = st.TypeOfFee;
                        LoadFeeTime(st.ID, st.TypeOfFee);
                        if (cbfeetime.SelectedItem != null)
                        {
                            ShowFeeToPay(studentID, st.TypeOfFee, cbfeetime.SelectedItem.ToString());
                        }
                    }
                }
                else
                {
                    frmSelectTempStudent temst = new frmSelectTempStudent();
                    if (temst.ShowDialog() == DialogResult.OK)
                    {
                        string data = temst.Name;
                        buttonEdit_Student.EditValue = data;
                        tempStudentId = temst.ID;
                        branchId = temst.BranchID;
                    }
                }
            }
        }

        private void cbfeetime_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbfeetime.SelectedIndex != 0)
            {
                ShowFeeToPay(studentID, typefee, cbfeetime.SelectedItem.ToString());
            }
        }

        private void radioGroup_AutoMode_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtcode.Enabled = !(radioGroup_AutoMode.SelectedIndex == 1);
            if (radioGroup_AutoMode.SelectedIndex == 1 && ID <= 0)
            {         
                txtcode.Text = RegisterService.RegisterServices.VoucherService.GenerateReceiptNo(dateEdit_ceatedate.DateTime);
            }

        }

        private void cmdViewOverPay_Click(object sender, EventArgs e)
        {
            frmStudentOverPay frm = new frmStudentOverPay();
            frm.Show();
        }

      
    
       
    
  


    }
}
